//utils文件夹下写axios相关的公共配置
import axios from 'axios'
import store from '@/store'
import { Toast } from 'vant';

// axios.defaults.baseURL = ''
const instance = axios.create({
    baseURL: 'http://toutiao.itheima.net'
})

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么,config是这次请求所有的配置
    //config.headers是这次请求的请求头配置
    const token = store.getters.token
    if (token) {
        config.headers.Authorization = `Bearer ${token}`
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use( function (response) {
    
    return response;
    
},async function (error) {
    // 对响应数据做点什么
    //接口请求到什么数据,取决于拦截器返回什么数据
    if (error.response && error.response.status === 401) {
        //短token过期,要处理
            if (store.getters.token) {
                //登录了才可以换
                const { refresh_token } = store.state.user
               try {
                 //去刷新token接口换区新的token
                   let { data } = await axios({
                       url: 'http://toutiao.itheima.net/v1_0/authorizations',
                       method:'put',
                       headers: {
                        Authorization:`Bearer ${refresh_token}`
                       }
                 })
                console.log(data);
                //存起来
                store.commit('setUser', {
                    token: data.data.token,
                    refresh_token
                })
                //继续上一次的出错的请求,这次让他正确完成
                return instance(error.config)//error是上一次的没有完成的所有的配置
               } catch (error) {
                Toast.fail('登录失效,重新登录')
                   this.$router.push('/login')
                   console.log(error);
                // return Promise.reject(error)
               }
            } else {
                Toast.fail('登录失效,重新登录')
                this.$router.push('/login')
                return Promise.reject(error)
            }
        }
    return Promise.reject(error);
})

export default instance